// ./config/db.config.js

const mongoose = require('mongoose');
// 确保在连接前加载环境变量，因为 app.js 也会调用这个文件
require('dotenv').config();

const MONGODB_URI = process.env.MONGODB_URI;

/**
 * 建立数据库连接
 */
const connectDB = async () => {
    if (!MONGODB_URI) {
        console.error('❌ 错误: 环境变量 MONGODB_URI 未设置。请检查 .env 文件。');
        process.exit(1); // 退出应用
    }

    try {
        // 使用 await 等待连接完成
        await mongoose.connect(MONGODB_URI, {
            // 推荐设置，去除一些 Mongoose 弃用警告
            // useNewUrlParser: true,
            // useUnifiedTopology: true,
            // useCreateIndex: true, // 在 Mongoose v6+ 中已弃用或集成
            // useFindAndModify: false // 在 Mongoose v6+ 中已弃用或集成
        });

        console.log('✅ MongoDB 数据库连接成功！');
    } catch (error) {
        console.error(`❌ MongoDB 数据库连接失败: ${error.message}`);
        // 可选：在连接失败时退出进程
        // process.exit(1);
    }
};

// 监听数据库连接事件 (可选，但推荐用于更详细的日志)
const db = mongoose.connection;

// 监听连接错误事件
db.on('error', (err) => {
    console.error(`🔴 MongoDB 连接错误: ${err.message}`);
});

// 监听断开连接事件
db.on('disconnected', () => {
    console.log('⚠️ MongoDB 连接已断开！');
});

// 在应用关闭时断开 Mongoose 连接
process.on('SIGINT', async () => {
    await mongoose.connection.close();
    console.log('服务器进程终止，MongoDB 连接已关闭。');
    process.exit(0);
});

module.exports = connectDB;
